package done.easy_001_100;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import static com.study.util.LogUtil.info;

/**
 * 70. Climbing Stairs
 * <p>
 * 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
 * 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢？
 * 注意：给定 n 是一个正整数。
 * <p>
 * 示例 1
 * 输入： 2
 * 输出： 2
 * 解释： 有两种方法可以爬到楼顶。
 * 1.  1 阶 + 1 阶
 * 2.  2 阶
 * 2019-03-23 1:49 PM
 **/
@Slf4j
public class ClimbingStairs {

    @SuppressWarnings("all")
    public int climbStairs(int n) {
        //190323 first
        //190829 second 早就忘了看了答案会做了
        //200118 third 看了答案做出来的
        return 1;
    }

    @Test
    public void test() {
        info("89 -> {}", climbStairs(10));
    }
}



























/*
/**
 *     动态规划
 *     recent 中存储上一层爬楼梯方法数目
 *     copy 作为中间临时变量
 *     res 表示当前楼梯方法数目
 * 详解
 *     爬楼梯的行为，必然是从 1 层爬起，而且也只有两种方法 2阶/1阶
 *         1 层 = 1(一种方法)
 *         2 层 = 2(两种方法)
 *         return n
 *     第n层开始
 *         n 层 = (n-1层方法数目) + (n-2层方法数目)
 *         res += tmp
 * /
public int climbStairs(int n) {
    if (n <= 2)
        return n;

    int recent_2 = 1;
    int recent_1 = 2;

    //临时保存用
    int temp;
    for (int i = 3; i <= n; i++) {
        //total = 下一次的 (n-1)方法数
        temp = recent_1;

        //总方法数 = (n-1)方法数 + (n-2)方法数
        recent_1 = recent_1 + recent_2;

        //下一次的 (n-2)方法数 = 当前总方法数
        recent_2 = temp;
    }
    return recent_1;
}
*/